<?php
namespace app\index\controller;

use app\index\model\Interview;
use think\Controller;

class Index extends Controller
{
    public function index()
    {
        return $this->fetch();
    }

    public function search()
    {
        //接收表单传来的搜索关键词
        $keyword = $this->request->param('wd');

        //如果用户没有输出关键词，则让用户跳转到搜索输入页
        if (empty($keyword)){
            $this->redirect('index/Index/index');
        }

        //同级符合搜索条件的总数
        $num = \think\Db::table('company')->where('name','like', '%'.$keyword.'%')->count();

        //采用内置的分页模式，查询出 符合搜索条件的 列表
        $list = \think\Db::table('company')
            ->where('name','like', '%'.$keyword.'%')
            ->paginate(10, false, ['query'=>['wd'=>$keyword]]);


        // 处理让关键词变红
        $newList = $list->toArray()['data'];
        foreach ($newList as $k=>$v) {
            $newList[$k]['name'] = str_replace($keyword, ('<span class="text-danger">'.$keyword.'</span>'), $v['name'] );
        }


        $this->assign('keyword', $keyword);
        $this->assign('list', $list);
        $this->assign('newList', $newList);
        $this->assign('num', $num);
        return $this->fetch();

    }


    /**
     * 添加一个企业
     */
    public function add()
    {
        //用户未登录就无法查看
        $userObject = userInfo();
        if (!$userObject){
            $this->error('您需要登录后才能进行操作', url('index/Sign/in'));
        }


        $request = $this->request;

        if ($request->isGet()){
            return $this->fetch();
        }


        if ($request->isPost()){

            //验证数据
            $rule = [
                'name' => 'require|length:2,20',
                'phone' => 'length:11,13',
                'address' => 'max:50',
                'scale' => 'require|in:0,1,2,3,4,5',
                'sex_ratio' => 'require|in:0,1,2',
                'sort' => 'require|in:0,1,2,3,4',
                'introduce' => 'max:65535'
            ];
            $msg = [
                'name.require'  => '企业名称为必填项',
                'name.length'   => '企业名称的长度应在2-20之间',
                'phone.length'  => '联系电话长度有误',
                'address.max'   => '企业地址长度过长',
                'scale.require' => '员工规模有误',
                'scale.in'      => '员工规模有误',
                'sex_ratio.require' => '男女比例填写有误',
                'sex_ratio.in'      => '男女比例填写有误',
                'sort.require' => '企业类型选择有误',
                'sort.in'      => '企业类型选择有误',
                'introduce.max'=> '企业介绍过长'
            ];
            $data = $request->param();
            $check = $this->validate($data, $rule, $msg);
            if ($check === true){
                //验证通过，数据入库
                $data['uid'] = $userObject->id;

                if (\think\Db::table('company')->data($data)->insert()){
                    $this->success('添加成功');
                }else{
                    $this->error('添加失败');
                }
            }else{
                $this->error($check);
            }

        }
    }

    /**
     * 企业的详情
     */
//    public function show()
//    {
//        $requret = $this->request;
//        $id = $requret->param('id');
//        if (empty($id)){
//            $this->error('您要查看的企业信息不存在');
//        }
//        //获取企业的基本信息
//        $info = \think\Db::table('company')->where('id', '=',$id)->find();
//
//        if (empty($info)){
//            $this->error('您要查看的企业信息不存在');
//        }
//        $this->assign('info', $info);
//
//        //获取面试经历信息
//        $interview_list = \think\Db::query('select interview.*,user.nickname,user.avatar from interview left join user on user.id=interview.uid where company_id='.$id);
////        print_r($interview_list);
////        $interview_list = \think\Db::table('interview')->where('company_id', $id)->select();
//        $user = userInfo();
//        if (!empty($user)){
//            //todo 这种写法基本上等着被开除
//            //如果用户处于登录状态，则检验是否针对该条记录点赞过
//            foreach ($interview_list as $k=>$v){
//                $where = ['interview_id'=>$id, 'uid'=>$user->id];
//                if (\think\Db::table('interview_ding')->where($where)->find()){
//                    $interview_list[$k]['dingx'] = 1;
//                }
//            }
//        }
////        print_r($interview_list);
//        $this->assign('interview_list', $interview_list);
//        return $this->fetch();
//    }



    public function show()
    {
        $request = $this->request;
        //企业id
        $id = $request->param('id');
        if (empty($id)){
            $this->error('您要查看的企业信息不存在');
        }
        //获取企业的基本信息
        $info = \think\Db::table('company')->where('id', '=',$id)->find();

        if (empty($info)){
            $this->error('您要查看的企业信息不存在');
        }
        $this->assign('info', $info);

        //获取点赞的信息
        $interview_list = Interview::with('author')->where('company_id', $id)->paginate(3);
        $user = userInfo();
        foreach ($interview_list as $k=>$v){
            //遍历本次查询出的每一个面试经历信息 是否被当前登录用户点赞过
            $where = ['interview_id'=>$v->id, 'uid'=>$user->id];
            if (\think\Db::table('interview_ding')->where($where)->find()){
                $v->dingx = 1;
                //对象类似引用赋值
//                    $interview_list[$k] = $v;
            }else{
                $v->dingx = 0;
            }

        }




//        $interview_data = $interview_list->toArray()['data'];
//
//
//
//        if (!empty($user)){
//            //todo 这种写法基本上等着被开除
//            //如果用户处于登录状态，则检验是否针对该条记录点赞过
//            foreach ($interview_data as $k=>$v){
//                $where = ['interview_id'=>$id, 'uid'=>$user->id];
//                if (\think\Db::table('interview_ding')->where($where)->find()){
//                    $interview_data[$k]['dingx'] = 1;
//                }
//            }
//        }
//
//        print_r($interview_data);



        $this->assign('interview_list', $interview_list);
        $this->assign('page', $interview_list);


        //获取标签信息
//        $res = \think\Db::table('company_tag')->where('company_id', $id)->column('tag_id');
//        print_r($res);

        $tagList = \think\Db::query(sprintf('select * from tag where id in (select tag_id from company_tag where company_id=%d)', $id));
        $this->assign('tagList', $tagList);


        //获取公司领导信息
        $leaders = \think\Db::table('leader')->where('company_id',$id)->select();
        $this->assign('leaders',$leaders);


        //获取公司工作信息
        $job = \think\Db::table('job')->where('company_id',$id)->select();
        $this->assign('job',$job);

        return $this->fetch();
    }


    /**
     * 添加面试经历
     * 登后才能进行操作
     */
    public function add_interview()
    {
        //检验用户是否登录
        $user = userInfo();
        if (empty($user)){
            $this->error('您需要登录后才能进行操作', url('index/Sign/in'));
        }
        //面试经历的内容
        $data['content'] = $this->request->param('content');
        //企业的id
        $data['company_id'] = $this->request->param('id');

        //验证数据
        $rule = [
            'content' => 'require|min:10|max:65535',
            'company_id' => 'require'
        ];

        $msg = [
            'content.require' => '面试经历详情为必填项',
            'content.min' => '面试经历最少需要10个字符',
            'content.max' => '面试经历最大只能有65535个字符',
            'company_id.require' => '企业信息不全'
        ];

        if ($this->validate($data, $rule, $msg) === true){

            //验证企业的有效性
            $company = \think\Db::table('company')->where('id', $data['company_id'])->find();
            if (empty($company)){
                $this->error('企业不存在');
            }

            //记录发表者的信息
            $data['uid'] = $user->id;
            //记录添加时间
            $data['create_time'] = date('Y-m-d H:i:s');

            //数据入库
            if (\think\Db::table('interview')->data($data)->insert()){
                $this->success('添加成功');
            }else{
                $this->error('添加失败');
            }
        }else{
            $this->error('添加失败');
        }
    }

    public function ding()
    {
        //该用户必须登录。
        //当前登录用户的信息
        $user = userInfo();
        if (empty($user)){
            $this->error('您需要登录才能操作');
        }

        //这是面试经历的id
        $id = $this->request->param('id');
        //数据验证
        if (empty($id)){
            $this->error('非法操作');
        }


        //一条面试经历的信息
        $info = \think\Db::table('interview')->where('id', $id)->find();

        if(empty($info)){
            $this->error('非法操作');
        }
        //检验是否是给自己点赞
        if ($info['uid'] == $user->id){
            $this->error('自己不要点赞自己啦');
        }

        //检验用户是否已经点赞过

        if (\think\Db::table('interview_ding')->where(['interview_id'=>$id, 'uid'=>$user->id])->find()){
//            $this->error('您已经点过赞了');
            //取消赞
            if (\think\Db::table('interview')->where('id', $id)->setDec('ding')){

                \think\Db::table('interview_ding')->where(['interview_id'=>$id, 'uid'=>$user->id])->delete();

                $this->success('取消成功',null, 1);
            }else{
                $this->error('操作失败');
            }

        }else{

            if (\think\Db::table('interview')->where('id', $id)->setInc('ding')){

                \think\Db::table('interview_ding')->data(['interview_id'=>$id, 'uid'=>$user->id])->insert();

                $this->success('点赞成功', null, 0);
            }else{
                $this->error('操作失败');
            }

        }

    }


    /**
     * 为一个企业添加标签
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function add_tag()
    {
        $request = $this->request;
        $company_id = $request->param('id');
        $tagName= $request->param('tagName');
        //数据验证
        if (empty($company_id)){
            $this->error('非法操作');
        }

        if (mb_strlen($tagName, 'utf-8') > 10 || mb_strlen($tagName, 'utf-8') < 2){
            $this->error('标签的名称长度应在2-10位之间');
        }

        //一个家企业最多打10个标签
        if (\think\Db::table('company_tag')->where('company_id', $company_id)->count() >= 10){
            $this->error('最多只能为企业创建10个标签');
        }


        $m = \think\Db::table('tag');
        //去tag表中查询该标签是否存在
        $tagInfo = $m->where('name', $tagName)->find();
        if ($tagInfo){
            $tagId = $tagInfo['id'];
        }else{
            //如果该标签未存在我们的标签表中，则添加它
            if ($m->data(['name'=>$tagName])->insert()){
                $tagId = $m->getLastInsID();

            }
        }


        //记录关系
        $data['company_id'] = $company_id;
        $data['tag_id'] = $tagId;

        //检验一下是否已经为该企业打过该标签
        if (\think\Db::table('company_tag')->where($data)->find()){
            $this->error('该标签已经被添加过');
        }


        if (\think\Db::table('company_tag')->insert($data)){
            $this->success('添加成功');
        }else{
            $this->error('添加失败');
        }


    }

}
